package com.study.design.pattern.pattern.creational.singleton.lazy.doublecheck;

/**
 * @Author: gongsl
 * @Date: 2025-02-23 11:33
 * @description:
 */
public class Singleton {

    // 使用volatile关键字确保INSTANCE的可见性和有序性
    private static volatile Singleton INSTANCE = null;

    private Singleton() {
        // 私有构造函数
    }

    public static Singleton getInstance() {
        // 第一次检查，避免不必要的同步
        if (INSTANCE == null) {
            // 加锁
            synchronized (Singleton.class) {
                // 第二次检查，确保单例
                if (INSTANCE == null) {
                    INSTANCE = new Singleton();
                }
            }
        }
        return INSTANCE;
    }
}
